/**
 * Time：2024.04.28
 * Content：lock_guard和unique_lock
 * Author：Qian You
 */
#include <iostream>
#include <bits/stdc++.h>
// 头文件
#include <thread>
using namespace std;

int a = 0;
mutex mtx;
void func1()
{
    for (int i = 0; i < 10000; i++)
    {
        // 局部作用域，自动构造加锁，析构解锁
        lock_guard<mutex> lg(mtx);
        a += 1;
    }
}

timed_mutex t_mtx;
void func()
{
    for (int i = 0; i < 2; i++)
    {
        // 延迟加锁
        // unique_lock<mutex> lg(mtx);
        unique_lock<timed_mutex> lg(t_mtx, defer_lock);
        if (lg.try_lock_for(chrono::seconds(2)))
        {
            this_thread::sleep_for(chrono::seconds(4));
            a += 1;
        }
    }
}

int main()
{
    thread t1(func);
    thread t2(func);
    t1.join();
    t2.join();
    cout << a << endl;
    return 0;
}